নিচে স্প্রিং বুট ক্লায়েন্টে (Spring Boot Client) WebClient
ব্যবহার করে একটি উদাহরণ দেখানো হয়েছে। WebClient
আধুনিক পদ্ধতি যা স্প্রিং বুট ২.০ থেকে পরিচিত এবং এটি non-blocking এবং reactive প্রোগ্রামিং সমর্থন করে।
Spring Initializr
-এ যান এবং Spring Boot Starter WebFlux
ডিপেনডেন্সি যুক্ত করে একটি নতুন প্রজেক্ট তৈরি করুন।
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
}
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class ApiClient {
private final WebClient webClient;
public ApiClient(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("https://jsonplaceholder.typicode.com").build();
}
// GET রিকোয়েস্ট
public Mono<String> getData(String endpoint) {
return webClient.get()
.uri(endpoint)
.retrieve()
.bodyToMono(String.class);
}
// POST রিকোয়েস্ট
public Mono<String> postData(String endpoint, Object requestBody) {
return webClient.post()
.uri(endpoint)
.bodyValue(requestBody)
.retrieve()
.bodyToMono(String.class);
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class ClientController {
private final ApiClient apiClient;
public ClientController(ApiClient apiClient) {
this.apiClient = apiClient;
}
// GET রিকোয়েস্ট
@GetMapping("/fetch-data")
public Mono<String> fetchData() {
String endpoint = "/posts/1"; // উদাহরণ API Endpoint
return apiClient.getData(endpoint);
}
// POST রিকোয়েস্ট
@PostMapping("/send-data")
public Mono<String> sendData(@RequestBody Object requestBody) {
String endpoint = "/posts"; // উদাহরণ API Endpoint
return apiClient.postData(endpoint, requestBody);
}
}
http://localhost:8080/fetch-data
https://jsonplaceholder.typicode.com/posts/1
থেকে ডেটা রিট্রিভ করবে।http://localhost:8080/send-data
Request Body (JSON):
{
"title": "foo",
"body": "bar",
"userId": 1
}
https://jsonplaceholder.typicode.com/posts
API-তে POST করবে এবং রেসপন্স ফিরিয়ে দেবে।WebClient
এর reactive nature এর কারণে, এটি Mono
বা Flux
টাইপের ডেটা রিটার্ন করে, যা asynchronous ডেটা প্রসেস করতে ব্যবহার করা হয়। এটি ব্লকিং ছাড়াই API থেকে ডেটা রিট্রিভ করতে পারে।
public Mono<String> getData(String endpoint) {
return webClient.get()
.uri(endpoint)
.retrieve()
.onStatus(
status -> status.is4xxClientError() || status.is5xxServerError(),
clientResponse -> Mono.error(new RuntimeException("Error: " + clientResponse.statusCode()))
)
.bodyToMono(String.class)
.onErrorResume(e -> Mono.just("Fallback Response: " + e.getMessage()));
}
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
{
"id": 101,
"title": "foo",
"body": "bar",
"userId": 1
}
Mono
এবং Flux
ডেটা স্ট্রিম ম্যানেজ করতে ব্যবহৃত হয়।
WebClient
হল Spring-এর ভবিষ্যত API ক্লায়েন্ট। তাই নতুন প্রজেক্টেRestTemplate
এর পরিবর্তেWebClient
ব্যবহার করার সুপারিশ করা হয়।
Read more